/**
 * 目标：访问路径不存在时，返回结果中包含请求路径path
    实现：1、创建一个异常过滤器，负责将捕获作为HttpException类实例的异常
        2、访问底层平台Request、Response，通过访问Request对象，
            提取原始url将其包含在日志信息中
        3、使用Response.jon()方法，使用Response对象直接控制发送的响应
 * 
 */

import {
  ArgumentsHost,
  ExceptionFilter,
  Catch,
  HttpException,
  HttpStatus,
  ServiceUnavailableException,
} from '@nestjs/common';
import { Request, Response } from 'express';
@Catch()
export class AllExceptionsFilter implements ExceptionFilter {
  catch(exception: Error, host: ArgumentsHost) {
    const ctx = host.switchToHttp();
    const request = ctx.getRequest<Request>();
    const response = ctx.getResponse<Response>();

    // request.log.error(exception);

    // 非 HTTP 标准异常的处理。
    response.status(HttpStatus.SERVICE_UNAVAILABLE).send({
      code: HttpStatus.SERVICE_UNAVAILABLE || 4043,
      timestamp: new Date().toISOString(),
      path: request.url,
      message: new ServiceUnavailableException().getResponse(),
    });
  }
}
